// 原生的构造函数
// 以前认为类必须是大写
// 类也可以当做函数来调用，在es6中，类只能new
function Animal(type) {
  this.type = type
  this.eat1 = function() {

  }
}

Animal.fn = function() { // 静态方法
  console.log('fn')
}

Animal.prototype.eat = function() {
  console.log('eat')
}

/*
// 构造函数的构造器指向构造函数的本身
// 可以通过判断constructor是不是类的实例
console.log(Animal.prototype.constructor == Animal)
Animal.prototype.constructor.fn()

let a1 = new Animal('哺乳类')
let a2 = new Animal('哺乳类')
console.log(a1.__proto__ === Animal.prototype) // true
console.log(a1.eat1 === a2.eat1) // false
console.log(a1.eat === a2.eat) // true  __proto__ 链 原型是属于类的

*/

function Cat(type) {
  Animal.call(this, type)
}

// 2.获取父类的公共属性(通过__proto__继承)
// es6
Object.setPrototypeOf(Cat.prototype, Animal.prototype)
// Cat.prototype.__proto__ = Animal.prototype
// Cat.prototype = Object.create(Animal.prototype, {consructor: {value: Cat}})
let cat = new Cat()
cat.eat() // 'eat'


// 1.继承实例上的属性
// let cat = new Cat('鸟类')
// console.log(cat.type) // 鸟类
// console.log(cat.eat) // undefined





